home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 7 / FM Towns Free Software Collection 7.iso / taropyon / hewin / ccikit.doc < prev    next >
Text File  |  1993-11-30  |  21KB  |  464 lines

  1. ==========================================================================
  2.             超弩級アプリケーションプロセッサ HEwin用
  3.                     CCIプログラミングキット
  4. ==========================================================================
  5.  
  6.  CCI プログラミングキットは,HEwin に内蔵されているC言語インタプリタCCI 
  7. によるプログラミングを行うためのツール&CCI プログラム集です。
  8.  
  9.  HEwin はCCI でのプログラミングにより各種状態設定/カスタマイズ/機能拡張
  10. が可能となっています。
  11.  
  12.  
  13. ●収録ファイル一覧
  14.  
  15.   ┌───────┬───────────────────────┐
  16.   │ファイル名    │内容                                          │
  17.   ├───────┼───────────────────────┤
  18.   │makecci .bat  │実行用バッチファイル                          │
  19.   │cpp     .exe  │CPP (プリ・プロセッサ)                      │
  20.   │              │                                              │
  21.   │afdcfg  .h    │ファイルマネージャ・ヘッダファイル            │
  22.   │affcopy .h    │ファイル複写機能用ヘッダファイル              │
  23.   │affrun  .h    │ファイルマネージャ・ヘッダファイル            │
  24.   │apl     .h    │アプリケーション・ヘッダファイル              │
  25.   │aplcol  .h    │アプリケーション色設定用ヘッダファイル        │
  26.   │aplctrl .h    │アプリケーション管理用ヘッダファイル          │
  27.   │aplmsg  .h    │アプリケーションメッセージ用ヘッダファイル    │
  28.   │aplno   .h    │アプリケーション種別用ヘッダファイル          │
  29.   │aplpcl  .h    │アプリケーション・子プロセスヘッダファイル    │
  30.   │aplwall .h    │壁紙設定用ヘッダファイル                      │
  31.   │ccidebug.h    │CCI デバッグ用ヘッダファイル                  │
  32.   │color   .h    │色設定用ヘッダファイル                        │
  33.   │dcncci  .h    │DOS コンソール用ヘッダファイル                │
  34.   │dcncmd  .h    │DOS コンソールコマンド用ヘッダファイル        │
  35.   │defs    .h    │各種定義用ヘッダファイル                      │
  36.   │keycode .h    │キーアドレス設定用ヘッダファイル              │
  37.   │lib     .h    │ライブラリヘッダファイル                      │
  38.   │moscur  .h    │マウスカーソル設定用ヘッダファイル            │
  39.   │ntmcci  .h    │通信ターミナル用ヘッダファイル                │
  40.   │ntmcmd  .h    │通信ターミナルコマンド用ヘッダファイル        │
  41.   │tdpcmd  .h    │テキストエディタ,コマンド用ヘッダファイル    │
  42.   │txdcmd  .h    │テキストエディタ,コマンド用ヘッダファイル    │
  43.   │txdisch .h    │テキストエディタ,文字種判定用ヘッダファイル  │
  44.   │txdofs  .h    │テキストエディタ,ライブラリ用ヘッダファイル  │
  45.   │              │                                              │
  46.   │bgm     .cci  │BGM 用プログラム                              │
  47.   │blackout.cci  │ブラックアウト用プログラム                    │
  48.   │cciapl  .cci  │CCI アプリケーションプログラム(デバッグ用)  │
  49.   │center01.cci  │センタ(タイプ1)処理用プログラム            │
  50.   │center02.cci  │センタ(タイプ2)処理用プログラム            │
  51.   │center03.cci  │センタ(タイプ2)処理用プログラム            │
  52.   │colset  .cci  │色設定用プログラム                            │
  53.   │dcn     .cci  │DOS コンソール用プログラム                    │
  54.   │dcntool .cci  │DOS コンソールツール用プログラム              │
  55.   │debug   .cci  │デバッグ用プログラム                          │
  56.   │expcfg  .cci  │EXP SETUP用プログラム                         │
  57.   │hewin   .cci  │HEwin 用プログラム                            │
  58.   │ish     .cci  │ish 用プログラム                              │
  59.   │lha     .cci  │LHa 用プログラム                              │
  60.   │lhx     .cci  │LHx 用プログラム                              │
  61.   │lib     .cci  │ライブラリ                                    │
  62.   │mktags  .cci  │tagsファイル作成用プログラム                  │
  63.   │nifty   .cci  │NIFTY-Serve センタ処理用プログラム            │
  64.   │ntm     .cci  │通信ターミナル用プログラム                    │
  65.   │ntmlib  .cci  │通信ターミナル用ライブラリプログラム          │
  66.   │sndplay .cci  │音声データ再生用プログラム                    │
  67.   │tdp     .cci  │テキストエディタ用プログラム                  │
  68.   │timer   .cci  │タイマ処理用プログラム                        │
  69.   │tools   .cci  │各種ツール用プログラム                        │
  70.   │wpaper  .cci  │壁紙用ヘッダファイル                          │
  71.   └───────┴───────────────────────┘
  72.  
  73.  
  74. **************************************************************************
  75. ☆  CCIとは?
  76. **************************************************************************
  77.  
  78.  CCI というのはHEwin に内蔵されているC言語インタプリタの名称です。
  79.  もともとはMIYAZAKI氏が設計・開発されたもので,MIYAZAKI氏の許可をもらいHEwin
  80. の各種制御/カスタマイズ用の言語としてHEwin に内蔵させてもらいました。
  81.  CCI の言語仕様はC言語とほぼ同じですが,構造体がありません。また,インタ
  82. プリタとして性格上の制限等もあります。
  83.  
  84.  インタプリタといえばTOWNS ユーザーにはF-BASIC386がもっとも知られていると
  85. 思いますが,CCI はF-BASIC386とはプログラミング方法や環境はまったく異なりま
  86. す。
  87.  CCI はHEwin 内部においてインタプリタとして動作しているというだけで,プロ
  88. グラミング的にはむしろコンパイラのほうに近いものとなっています。
  89.  
  90.  CCI で作成されたプログラムはまず気軽にRUN (実行)するなどとということは
  91. できません。CCI 用プログラムを実行するには.まず(かなり巨大な)HEwin 本体
  92. を起動しなければならないからです(この問題は小さなCCI プログラムを実行する
  93. だけの専用プログラムを作成すれば解決する問題ですが,現状ではCCI 用プログラ
  94. ムを実行するソフトはHEwin しか存在しませんので,そういうことになってしまい
  95. ます)。
  96.  
  97.  気軽に実行できない理由は簡単に暴走する点もあげられます。
  98.  ポインタの値を間違えるとHEwin の本体プログラムやデータ領域まで破壊されて
  99. しまいます(F-BASIC386でいえば,変数の値を間違えたらF-BASIC386インタプリタ
  100. のプログラムそのものが壊れた,といった感じです)。
  101.  無限ループを作ってしまうと復帰する手段がありませんので,TOWNS をリセット
  102. するしかなくなります。F-BASIC386のように [BREAK]キーを押せばいつでも止まる
  103. とはいかないのです。
  104.  
  105.  CCI はプログラムにミスがあっても「○○行にエラーがあります」という表示を
  106. するだけで,詳しい内容などは教えてくれません。しかもその表示されているエラ
  107. ー箇所(ソースリストの行番号)も正しいとはかぎりません(たいていはそれより
  108. も前にエラーが発生しています)。
  109.  
  110.  なげやりな言い方をすれば,「正しく動くプログラムだけが動く」という仕様な
  111. のです。
  112.  
  113.  HEwin におけるCCI の主な役割は各種状態設定/カスタマイズです。CCI はHEwin
  114. の環境をユーザーが手軽に変更するために用意されたものですから,大規模なプロ
  115. グラミングを行うことはあまりないはずです(それほど手軽ではないかもしれませ
  116. んが, High Cを用意してHEwin そものをコンパイルし直すよりは楽なはずです)。
  117.  
  118.  HEwin では,CCI でのプログラミングによってもともと備わっていない機能を拡
  119. 張することもできます。これには多少の複雑なプログラングが必要になるかもしれ
  120. ません。そういった場合,言語仕様がC言語とほぼ同じなのを利用して他のC言語
  121. (High C やDOS 上のCコンパイラ)で開発/デバッグしてからCCI に移植すると
  122. いう方法もあります。
  123.  
  124.  CCI 用に書かれたプログラムがどんなものなのかというのは収録されているファ
  125. イルが見ればわかるでしょうが(拡張子が.CCIとなっているファイルがそうです),
  126. C言語そのものです。一部はそのままCコンパイラでコンパイルでできてしまいそ
  127. うです。
  128.  
  129.  
  130. **************************************************************************
  131. ☆  HEwinとCCIについて,
  132. **************************************************************************
  133.  
  134.  HEwin は起動時に,HEWIN.CCI というファイル名のCCI プログラムを自動的に読
  135. み込みます。
  136.  現バージョンのHEwin では起動後に別のCCI プログラムを読み込んで実行したり
  137. することはできません。
  138.  よって,CCI で作成されたプログラムは全てHEWIN.CCI の中に含まれている必要
  139. があります。
  140.  
  141.  
  142. **************************************************************************
  143. ☆  HEwin用CCIプログラムの作成方法
  144. **************************************************************************
  145.  
  146.  収録されているCCI 用のプログラムは,そのままではHEwin からは使えません。
  147.  HEwin から使えるようにするにはプリプロセッサ(cpp )を用いて変換(マクロ
  148. 置換)する必要があります。
  149.  
  150.  この変換を行うのがMAKECCI.BAT というバッチファイルです。
  151.  このバッチファイルを実行するとプリプロセッサ(CPP.EXE )を起動してソース
  152. リストをHEwin から読み込める形に変換してくれます。
  153.  
  154.  MAKECCI.BAT を実行するとNEWHEWIN.CCIというプログラムが生成されます。これ
  155. をHEwin で使うにはHEwin の本体プログラム(HEWIN.EXP )が格納されているディ
  156. レクトリにHEWIN.CCI というファイル名で複写してください。
  157.  MAKECCI.BAT はコマンドモードで実行してください。また,関連ファイル(CCI 
  158. 用のソースリスト等)が収録されているディレクトリがカレントの状態で実行して
  159. ください。
  160.  
  161.  収録されているソースリストをそのまま使ってHEWIN.CCI を作成する場合にはエ
  162. ラー等は起こらないと思いますが,自分で改造したり修正したりすると何らかの間
  163. 違いをおかしている可能性が出できます。
  164.  
  165.  HEwin は起動時にHEWIN.CCI を読み込みます。HEWIN.CCI 読み込み中に(文法ミ
  166. ス等で)エラーが発生するとエラー箇所を表示して動作を中断します。
  167.  表示されているエラー箇所はプリプロセッサによって変換される前のソースリス
  168. トのファイル名と位置(行番号)を示していますが,その箇所でエラーが起こって
  169. いるとは限りません。たいていはそれよりも前でエラーが発生している事がありま
  170. す。
  171.  表示されているエラー箇所はヒントくらいに考えてソースリストをみてエラー箇
  172. 所を探してください。
  173.  
  174. ※ プリプロセッサは単なるソースリスト変換プログラム」なので,ディスクの
  175.     読み書きとマクロ関係以外,文法上のエラーチェック等は一切行いません。
  176.  
  177.  
  178. **************************************************************************
  179. ☆  その他,注意・補足
  180. **************************************************************************
  181.  
  182.  本格的にCCI 用プログラムを作成するには,HEwin 以外の何らかのエディタが必
  183. 要です。
  184.  HEwin がエディタなのに別のエディタがどうして必要になるかというと,HEwin
  185. はHEWIN.CCI がないと起動ができないのでHEWIN.CCI が完成するまでは別のエディ
  186. タでソースを修正する必要があるからです。
  187.  
  188.  十分デバッグされた完成済のHEWIN.CCI を用意しておいて,新しく作成するHEWIN.
  189. CCI は別に作成するという方法ならエディタを用意することはないと思いますが,
  190. DOS 上で動作するエディタ(RWINK ,MIFES ,RED やVz等)を用意したおいたほう
  191. が何かと便利です。
  192.  
  193.  CCI プログラミングキットの中には簡単な説明ファイル(CCIKIT.DOC)とCCI 関
  194. 数の一覧表(CCIFUNC.LST )が収録されています。CCI によるプログラミングの時
  195. の参考にしてください。
  196.  これらのファイルを含めて,CCI 用のプログラムソースリストはすべてタブサイ
  197. ズは4の状態で書かれています。これらのファイルを見たり,編集したりするとき
  198. はエディタやテキスト表示プログラムのタブサイズは4にしてください。
  199.  
  200. ※  HEwin は正常に動作するHEWIN.CCI がないと起動できませんので,オリジナ
  201.     ルファイル(太っ腹FDに収録されているHEWIN.CCI )は必ずバックアップを
  202.     とって保存しておいてください。
  203.  
  204. ●CCI関数のアイテム登録について
  205.  
  206.  ユーザーが作成したCCI プログラムは,テキストエディタや通信ターミナル等さ
  207. まざまな場所で使われますが,一番手っとり早いのはアプリケーションセレクタに
  208. アイテム登録する方法です。
  209.  
  210.  この方法では,テキストエディタや通信機能を制御することはできませんが,作
  211. 成したCCI プログラムは独立した単独の機能として使えるので,比較的簡単に作成
  212. することができます。
  213.  CCI で作成されたプログラムはアプリケーションセレクタのアイテム(ユーザー
  214. 作成アプリケーション)に,その関数名を書くだけで呼び出せます。
  215.  HEwin に最初から備わっている機能でいえば,音声再生(アイテム登録名は「SND
  216. PLAY」)がこれにあたります。
  217.  アイテム登録できるCCI 関数は,慣習的に先頭が「CCI_」から始まる関数名をつ
  218. けます。
  219.  アイテム登録時に指定したパラメータはC言語のmain()関数と同じように,パラ
  220. メータの個数とポインタがargcとargvに設定されますので,普通のC言語と同じ要
  221. 領でプログラミングできます。
  222.  
  223. **************************************************************************
  224. ☆              各種状態設定/カスタマイズについて,
  225. **************************************************************************
  226.  
  227. ●デフォルトソートタイプについて
  228.  
  229.  ファイルダイアログ起動直後のソート種別は,FsDefSort という変数に設定され
  230. ています。
  231.  FsDefSort はHEWIN.CCI中の「FileDialogSetup()」という関数内で指定されてい
  232. ます。
  233.  ソート種別の指定には,ヘッダファイル(LIB.H )中に定義されているマクロ,
  234.     #define FSORT_RVS   (0x80)
  235.     #define FSORT_OFF   (0)
  236.     #define FSORT_FILE  (1)
  237.     #define FSORT_SUB   (2)
  238.     #define FSORT_DATE  (3)
  239. これらを使ってください。
  240.  
  241.     【例】
  242.         (1) FsDefSort = FSORT_SUB;
  243.             拡張子でソート
  244.  
  245.         (2) FsDefSort = FSORT_DATE|FSORT_RVS;
  246.             新しく作成されたファイル順にソート
  247.  
  248.  
  249. ●ファイルマネージャ(ファイルリスタ)での実行可能ファイルの登録
  250.  
  251.      ファイルマネージャ(ファイルリスタ)で実行可能なファイルは,ファイル 
  252.     HEWIN.CCI中の「AfmSetup()」という関数内で登録されています。
  253.  
  254.     【関数】Afm_setRunFile()
  255.  
  256.     【書式1】  内蔵アプリケーション
  257.         Afm_setRunFile( int ftyp, char *fn, int typ,
  258.                                                   int aplTyp, char *para )
  259.     【入力】
  260.         int     ftyp;           ファイルタイプ(現在未使用,0を指定)
  261.         char    *fn;            ファイル名
  262.         int     typ = 2;        タイプ(内蔵アプリケーション==2)
  263.         int     aplTyp;         アプリケーションタイプ
  264.                             ==    50;   DOS コンソール
  265.                             ==  1101;   テキストエディタ
  266.                             ==  1202;   TIFFビュワー
  267.         char    *para;          パラメータ
  268.  
  269.  
  270.     【書式2】  CCI 関数
  271.         Afm_setRunFile( int ftyp, char *fn, int typ,
  272.                                                   char *func, char *para )
  273.     【入力】
  274.         int     ftyp;           ファイルタイプ(現在未使用,0を指定)
  275.         char    *fn;            ファイル名
  276.         int     typ = 3;        タイプ(CCI 関数==3)
  277.         char    *func;          関数名
  278.         char    *para;          パラメータ
  279.  
  280.  
  281.     【書式3】  DOS コマンド
  282.         Afm_setRunFile( int ftyp, char *fn, int typ,
  283.                                          int cons, char *cmd, char *para )
  284.     【入力】
  285.         int     ftyp;           ファイルタイプ(現在未使用,0を指定)
  286.         char    *fn;            ファイル名
  287.         int     typ = 4;        タイプ(DOS コマンド==4)
  288.         int     cons;           コンソールスイッチ
  289.                                 == 0    コンソールあり
  290.                                 != 0    コンソールなし
  291.         char    *cmd;           実行コマンド名
  292.         char    *para;          パラメータ
  293.  
  294.     【解説】
  295.          1番目のパラメータftypは現バージョンでは未使用です(0を指定して
  296.         ください)。
  297.          2番目のパラメータfnには実行可能なファイル名を指定します。「.AAA」
  298.         のようにピリオド「. 」から指定すると拡張子の指定となります。
  299.  
  300.          書式3(DOS コマンド)のパラメータpara中に半角パーセント記号「%」
  301.         があると,実行時に「%」は実行ファイル名に置き代わります。
  302.  
  303.     【例】
  304.         Afm_setRunFile( 0, ".AAA", 4, 0, "ish", "% /S" );
  305.  
  306.         拡張子の.AAAのファイルが実行されると「ish <ファイル名> /S」 を実行。
  307.  
  308.  
  309. ●  DOS コマンド登録
  310.  
  311.      実行を禁止したり,実行前に確認を求めてくるDOS コマンドは,ファイル
  312.     DCN.CCI 中の「DcnUsr_sysInit()」という関数内で設定されています。
  313.  
  314.     【関数】DcnSetCommand()
  315.  
  316.     【書式】
  317.         DcnSetCommand( char *cmd, int att )
  318.  
  319.     【入力】
  320.         char    *cmd;           コマンド名
  321.         int     typ;            コマンド種別
  322.                                 ビット0~4コマンド種別
  323.                                     == 0    通常コマンド
  324.                                     == 8    ネイティブモード子プロセス
  325.                                 ビット5    実行前に確認を行う場合はオン
  326.                                 ビット6    画面を保護する必要がある場合は
  327.                                             オン
  328.                                 ビット7    実行を禁止するときはオン
  329.  
  330.     【解説】
  331.      DOS コマンドの種別を登録しておきます(バッチファイルの中で使われてい
  332.     る場合は無効です)。
  333.      コマンドの種別は,ヘッダファイル(DCNCCI.H)中で定義されているマクロ,
  334.         #define DCN_CMDSYS_NORMAL   (0)     /* 通常コマンド         */
  335.         #define DCN_CMDSYS_EXP      (8)     /* ネイティブ子プロセス */
  336.         #define DCN_CMDSYS_IGNORE   (0x80)  /* 実行禁止             */
  337.         #define DCN_CMDSYS_SCNSAVE  (0x40)  /* 画面保存             */
  338.         #define DCN_CMDSYS_CHECK    (0x20)  /* 実行確認             */
  339.     これらを使って指定してください。
  340.  
  341.     【例】
  342.         (1) DcnSetCommand("CMD_1", DCN_CMDSYS_IGNORE);
  343.             コマンドCMD_1 は実行禁止にする。
  344.  
  345.         (2) DcnSetCommand("CMD_2", DCN_CMDSYS_SCNSAVE);
  346.             コマンドCMD_2 は画面の保護が必要なコマンド。
  347.  
  348.         (3) DcnSetCommand("CMD_2", DCN_CMDSYS_SCNSAVE | DCN_CMDSYS_CHECK);
  349.             コマンドCMD_3 は画面の保護が必要なコマンドで,実行前に確認を行
  350.             う
  351.  
  352.  
  353. **************************************************************************
  354. ☆                  CCI プログラミングの手引き
  355. **************************************************************************
  356.  
  357. ■  ファイルダイアログの使い方
  358.  
  359.  ファイルの選択や,ファイル名の入力等,ファイルダイアログは使われる頻度が
  360. 高いのでファイルダイアログ関係の関数の使い方を説明しておきます。
  361.  
  362. ●  基本チャート
  363.  
  364.     基本的な流れは,以下のようになります。
  365.  
  366.         ┌──────────────┐
  367.         │(1) オープン                │
  368.         │  FDL_open()                │
  369.         └──────┬───────┘
  370.                       │      エラー
  371.                       ├────────────→    終了
  372.                       ↓
  373.         ┌──────────────┐
  374.         │(2) 各種設定                │
  375.         │  FDL_set_title()           │
  376.         │  FDL_set_config()          │
  377.         │  FDL_set_wildcard()        │
  378.         │  FDL_set_defaultFilename() │
  379.         │  FDL_setStartPath()        │
  380.         └──────┬───────┘
  381.                       │
  382.                       ↓
  383.         ┌──────────────┐
  384.         │(3) サービス開始            │
  385.         │  FDL_start()               │
  386.         └──────┬───────┘
  387.                       │      取消またはエラー
  388.                       ├───────────────┐
  389.                       ↓                              │
  390.         ┌──────────────┐              │
  391.         │(4) ファイル名,その他取得  │              │
  392.         │  FDL_get_filename()        │              │
  393.         │  FDL_get_drv(fdl)          │              │
  394.         │  FDL_get_whare(fdl)        │              │
  395.         └──────┬───────┘              │
  396.                       │                              │
  397.                       │←──────────────┘
  398.                       ↓
  399.         ┌──────────────┐
  400.         │(5) クローズ                │
  401.         │  FDL_close()               │
  402.         └──────┬───────┘
  403.                       │
  404.                       ↓
  405.  
  406.  同じ設定で何度もファイルダイアログを使いたい場合は,(3)~(4)の間をルー
  407. プしてください。
  408.  
  409. ●  サンプルコーディング
  410.  
  411.     【コーディング例】
  412.  
  413.     int     ret;
  414.     char    *fdl;
  415.     char    *fn, filename[256];
  416.  
  417.     /* (1) オープン */
  418.     if ( (fdl = FDL_open(0)) == NULL )
  419.         return (ERR);   /* error */
  420.  
  421.     /* (2) 各種設定 */
  422.     FDL_set_wildcard( fdl, "*.*");           /* ワイルドカード   */
  423.     FDL_set_title( fdl,"TEST FILEDIALOG");   /* タイトル         */
  424.  
  425.     /* (3) サービス開始 */
  426.     ret = FDL_start(fdl);
  427.  
  428.     filename[0] = '\0';
  429.     if ( ret == NORMAL )
  430.     {
  431.         /* (4) ファイル名の取得 */
  432.         fn  = FDL_get_filename(fdl);
  433.  
  434.         /* ファイル名のチェック */
  435.         if ( strlen(fn) > 0 )
  436.         {   /* fnはFDL_close()すると実体がなくなるので複写しておく  */
  437.             strcpy( filename, fn);
  438.         }
  439.     } /* else 取消 or エラー    */
  440.  
  441.     /* (5) クローズ */
  442.     FDL_close(fdl);
  443.  
  444.     /* filename に選択/入力されたファイル名が設定される    */
  445.  
  446.  
  447.  
  448. **************************************************************************
  449. ☆  最後に,
  450. **************************************************************************
  451.  
  452.  この説明だけではCCI を自在に使いこなすりは困難だと思いますが,C言語を知
  453. っている方なら比較的簡単に扱えるはずです。後はHEwin 特有の関数や特徴/制限
  454. などに注意するだけです。
  455.  CCI 関数の一覧表やソースリスト等を参考にして,プログラミングに挑戦してみ
  456. てください。
  457.  
  458.  収録されているcpp のオリジナル(原版)はOS-9用で,Gigo氏が作成されたもの
  459. です。
  460.  MS-DOSにはMIYAZAIKI 氏が移植し,作者(TaroPYON)がCCI 用に多少手を加えま
  461. した。
  462.  Gigo氏,MIYAZAKI氏にはこの場を借りてお礼申し上げます。
  463.  
  464.